﻿#region 命名空间

using System;
using System.Collections.Generic;
using System.ServiceModel;
using Sharp.DataTransferObject;
using Sharp.Infrastructure;
using Sharp.Infrastructure.Interfaces;
using Sharp.Infrastructure.Search;

#endregion

namespace Sharp.ServiceContracts
{
    public partial interface IUserService
    {
        /// <summary>
        ///     获取分页信息(UserGroup)
        /// </summary>
        /// <param name="pf"></param>
        /// <returns></returns>
        [OperationContract]
        [FaultContract(typeof(FaultData))]
        PagedResult<UserGroupDTO> GetUserGroupPaged(PagingFeature pf);

        /// <summary>
        ///     根据用户组的全局唯一标识获取用户组信息。
        /// </summary>
        /// <param name="id">用户组的全局唯一标识。</param>
        /// <returns>包含了用户组信息的数据传输对象。</returns>
        [OperationContract]
        [FaultContract(typeof(FaultData))]
        UserGroupDTO GetUserGroupByKey(Guid id);

        /// <summary>
        ///     根据指定的用户组信息，创建用户组对象。
        /// </summary>
        /// <param name="userGroupDto">包含了用户组信息的数据传输对象。</param>
        /// <returns>已创建用户组对象的全局唯一标识。</returns>
        [OperationContract]
        [FaultContract(typeof(FaultData))]
        void CreateUserGroup(UserGroupDTO userGroupDto);

        /// <summary>
        ///     根据指定的用户组信息，更新用户组对象。
        /// </summary>
        /// <param name="userGroupDto">需要更新的用户组对象。</param>
        /// <returns>已更新的用户组对象。</returns>
        [OperationContract]
        [FaultContract(typeof(FaultData))]
        Result UpdateUserGroup(UserGroupDTO userGroupDto);
        /// <summary>
        ///     根据指定的用户组信息，更新用户组对象。
        /// </summary>
        /// <param name="userGroupDto">需要更新的用户组对象。</param>
        /// <returns>已更新的用户组对象。</returns>
        [OperationContract]
        [FaultContract(typeof(FaultData))]
        Result SaveUserGroup(UserGroupDTO userGroupDto);
        /// <summary>
        ///     删除用户组
        /// </summary>
        /// <param name="userGroupids">需要删除的用户组的Id。</param>
        [OperationContract]
        [FaultContract(typeof(FaultData))]
        Result DeleteUserGroups(IList<Guid> userGroupids);
        /// <summary>
        /// 检查用户组名称是否被占用
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        [OperationContract]
        [FaultContract(typeof(FaultData))]
        bool CheckUserGroupName(string name);
        /// <summary>
        /// 获取所有用户组
        /// </summary>
        /// <returns></returns>
        [OperationContract]
        [FaultContract(typeof(FaultData))]
        Result<IEnumerable<UserGroupDTO>> GetUserGroups();
    }
}